home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 March / Macworld (1998-03) (Disk 1).dmg / Shareware World / Info / For Developers / GhostScript 5.10 / MacGS-510 / files / gs_dps1.ps < prev    next >
Text File  |  1997-05-29  |  4KB  |  137 lines

  1. %    Copyright (C) 1997 Aladdin Enterprises.  All rights reserved.
  2. % This file is part of Aladdin Ghostscript.
  3. % Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  4. % or distributor accepts any responsibility for the consequences of using it,
  5. % or for whether it serves any particular purpose or works at all, unless he
  6. % or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  7. % License (the "License") for full details.
  8. % Every copy of Aladdin Ghostscript must include a copy of the License,
  9. % normally in a plain ASCII text file named PUBLIC.  The License grants you
  10. % the right to copy, modify and redistribute Aladdin Ghostscript, but only
  11. % under certain conditions described in the License.  Among other things, the
  12. % License requires that the copyright notice and this notice be preserved on
  13. % all copies.
  14.  
  15. % Initialization file for most of the Display PostScript functions
  16. % that are also included in Level 2.
  17.  
  18. level2dict begin
  19.  
  20. % ------ Virtual memory ------ %
  21.  
  22. /currentshared /.currentglobal load def
  23. /scheck /.gcheck load def
  24. %****** FOLLOWING IS WRONG ******
  25. /shareddict currentdict /globaldict .knownget not { 20 dict } if def
  26.  
  27. % Global and LocalFontDirectory must remain in systemdict
  28. % even if we temporarily exit Level 2 mode.
  29.  
  30. end                % level2dict
  31. systemdict begin
  32.  
  33. /SharedFontDirectory .FontDirectory .gcheck
  34.  { .currentglobal false .setglobal
  35.    /LocalFontDirectory .FontDirectory dup maxlength dict copy def
  36.    .setglobal .FontDirectory
  37.  }
  38.  { /LocalFontDirectory .FontDirectory def
  39.    50 dict
  40.  }
  41. ifelse def
  42.  
  43. end                % systemdict
  44. level2dict begin
  45.  
  46. % setshared must rebind FontDirectory to the appropriate one of
  47. % Local or SharedFontDirectory.
  48.  
  49. /.setglobal        % <bool> .setglobal -
  50.  { dup .setglobal
  51.    //systemdict /FontDirectory .currentglobal
  52.     { //SharedFontDirectory }
  53.     { //systemdict /LocalFontDirectory get }    % can't embed ref to local VM
  54.    ifelse .forceput pop
  55.  } .bind odef        % must bind .forceput and .setglobal
  56.             % even if NOBIND in effect
  57. /setshared /.setglobal load def
  58. .currentglobal setshared
  59.  
  60. % ------ Fonts ------ %
  61.  
  62. /selectfont        % <fontname> <size> selectfont -
  63.  { 1 index findfont
  64.    1 index dup type /arraytype eq { makefont } { scalefont } ifelse
  65.    setfont pop pop
  66.  } odef
  67. % undefinefont has to take local/global VM into account.
  68. /undefinefont        % <fontname> undefinefont -
  69.  { .FontDirectory 1 index .undef
  70.    .currentglobal
  71.     {        % Current mode is global; delete from local directory too.
  72.       //systemdict /LocalFontDirectory .knownget
  73.        { 1 index .undef }
  74.       if
  75.     }
  76.     {        % Current mode is local; if there was a shadowed global
  77.         % definition, copy it into the local directory.
  78.       //systemdict /SharedFontDirectory .knownget
  79.        { 1 index .knownget
  80.       { .FontDirectory 2 index 3 -1 roll put }
  81.      if
  82.        }
  83.       if
  84.     }
  85.    ifelse pop
  86.  } odef
  87.  
  88. % If we load a font into global VM within an inner save, the restore
  89. % will delete it from FontDirectory but not from SharedFontDirectory.
  90. % We have to handle this by making restore copy missing entries from
  91. % SharedFontDirectory to FontDirectory.  Since this could slow down restore
  92. % considerably, we define a new operator .dictcopynew for this purpose.
  93. % Furthermore, if FAKEFONTS is in effect, we want global real fonts to
  94. % override fake local ones.  We handle this by brute force.
  95. /restore        % <save> restore -
  96.  { dup //restore    % bind even if NOBIND
  97.    //systemdict /LocalFontDirectory get
  98.    FAKEFONTS
  99.     { mark
  100.         % We want to delete a fake font from the local directory
  101.         % iff the global directory now has no definition for it,
  102.         % or a non-fake definition.
  103.       1 index dup
  104.        {        % Stack: lfd mark lfd key ... lfd key value
  105.      length 1 gt
  106.       {        % This is a real local definition; don't do anything.
  107.         pop
  108.       }
  109.       {        % This is a fake local definition, check for global.
  110.         //SharedFontDirectory 1 index .knownget
  111.          {        % A global definition exists, check for fake.
  112.            length 1 eq { pop } { 1 index } ifelse
  113.          }
  114.          {        % No global definition, delete the local one.
  115.            1 index
  116.          }
  117.         ifelse
  118.       }
  119.      ifelse
  120.        } forall
  121.       pop counttomark 2 idiv { .undef } repeat pop
  122.     }
  123.    if
  124.    //SharedFontDirectory exch .dictcopynew pop
  125.    .currentglobal .setglobal    % Rebind FontDirectory according to current VM.
  126.    pop
  127.  } bind odef
  128.  
  129. % ------ Miscellaneous ------ %
  130.  
  131. /undef /.undef load def
  132.  
  133. end                % level2dict
  134.